package by2019;

public class 计算x的n次幂函数 {
	
	static int te = 0 ;

	public static void main(String[] args) {
		double db = myPowPluse(2.0, 3);
		System.out.println(db);
		//test();
	}
	//暴力破解
	public static double myPow(double x, int n) {
		double tem = 1 ;
		int m  ;
		m = Math.abs(n) ;
		for(int i=0;i<m;i++) {
			tem=tem*x ;
		}
		if(n<0) {
			tem = 1/tem ;
		}
		return tem ;
	}
	//利用分治思想,每次递归取n的一半，再将n个x乘积相乘
	//如果递归次数过高的话，jvm的方法栈会溢出，直接返回无穷大或者0
	public static double myPowPro(double x, int n) {
		//System.out.println("one in");
		
		if(n<0) {
			x = 1/x;
			n= -n ;
		}
		return doIt(x,n);
	}
	public static double doIt(double x, int n) {
		if(n==0)
			return 1.0 ;
		double tem = doIt(x, n/2) ;
		return n%2==1?tem*tem*x : tem*tem ;
	}
	
	
	//使用循环进行快速幂计算
	//不会写
	public static double myPowPluse(double x, int n) {
		double tem = 1 ;
		
		if(n<0) {
			n= -n ;
			x= 1/x ;
		}
		while(n>0) {
			if(n==1)
				tem *=  x ;
			x *= x ;
			n /= 2 ;
		}
		return tem ;
	}
}
